package pres.lnk.learn.designpattern.c_singleton;

/**
 * 单例模式
 * 懒汉式三（懒加载），确保了线程安全和性能
 * @Author lnk
 * @Date 2018/2/1
 */
public class Singleton4 {
    private static Singleton4 instance;

    /**
     * 私有化构造函数，防止被构建新的对象
     */
    private Singleton4(){

    }

    /**
     * 获取唯一实例，当用到时再加载对象
     * 使用了双重校验锁，当instance为null时加了同步再创建，避免了重复创建对象，
     * 同时也确保了以后不会再进行同步锁住，不影响效率
     * @return
     */
    public static Singleton4 getInstance(){
        if(instance == null){
            synchronized (Singleton4.class){
                if(instance == null){
                    instance = new Singleton4();
                }
            }
        }
        return instance;
    }
}
